</> 技術筆記Tech Notes

告別手動複製貼上!一行指令打造 Serenity Framework 的無痛 UI 文字更新流程

在使用 Serenity Framework 開發專案的時候,[DisplayName] 屬性經常是 UI 顯示文字的來源。 理想狀況下,它應該和資料庫欄位註解一致,這樣 UI 上的欄位名稱才能正確、清楚。

但實際上呢?

  • 資料庫註解更新了,Row.cs 沒有人去改。

  • DisplayName 一多,就容易手滑打錯。

  • 團隊開發時,顯示文字不一致,UI 呈現看起來很亂。

我自己遇過太多次這種情況,所以寫了一個小工具來徹底解決:

它叫 Serenity Row DisplayName Updater,簡稱 serupd

serupd 的設計理念

serupd 的核心想法很簡單: 「既然資料庫欄位註解就是最好的欄位說明,為什麼不直接拿來當 DisplayName?」

於是,serupd 會:

  1. 讀取資料庫欄位的註解

  2. 掃描 Row.cs 檔案

  3. 自動補上或更新 [DisplayName] 屬性

結果就是 UI 文字永遠和資料庫註解保持同步,不再需要手動複製貼上。

功能特色

  • 自動掃描指定資料夾下的所有 *Row.cs 檔案

  • 支援 SQL ServerPostgreSQLSQLite

  • 沒有 DisplayName 時會新增,有的話會自動更新

  • 可以加上 --comment-regex,從註解中抽取需要的部分

  • 使用 Roslyn API 精準修改,不會破壞原有程式碼格式

  • 可打包成單一執行檔,跨平台部署方便

安裝與使用

1. 環境需求

  • .NET 9.0+

  • 專案的 appsettings.json 要有資料庫連線設定

範例:

{
  "Data": {
    "Default": {
      "ConnectionString": "...",
      "ProviderName": "Microsoft.Data.SqlClient"
    },
    "Postgres": {
      "ConnectionString": "...",
      "ProviderName": "Npgsql"
    }
  }
}

2. 執行方式

基本語法:

serupd <Row.cs 所在目錄> [appsettings.json 路徑] [--comment-regex <regex>]

範例:

# 最簡單的用法
serupd C:\MyProject\Modules

# 指定 appsettings.json
serupd C:\MyProject\Modules C:\MyProject\appsettings.json

# 只抓註解中的括號內容
serupd C:\MyProject\Modules --comment-regex "\(([^)]+)\)"

使用前後對照

假設你的資料庫欄位註解是「使用者名稱」。

更新前的 Row.cs

[Column("UserName")]
public string UserName { get; set; }

執行 serupd 後的 Row.cs

[DisplayName("使用者名稱")]
[Column("UserName")]
public string UserName { get; set; }

是不是很直覺?這就是 serupd 幫你省下的複製貼上。

一個重要的前提:從資料庫設計開始

要實現這個高效的工作流程,我們必須從專案的源頭——資料庫——就開始打好基礎。 關鍵在於:設計資料庫的 Table 和 Column 時,務必為每一個欄位寫上清晰的註解 (Comment/Description)

這些註解不只是文件,它們會成為 UI 顯示文字的來源。 如果欄位註解本身就維護良好,那麼 serupd 就能幫你自動把這些資訊同步到程式碼裡。

換句話說,serupd 的效果好不好,很大程度取決於資料庫設計是否「一開始就用心」。

適用情境

  • 你的專案大量使用 Serenity Framework 的 Row 類別

  • 資料庫欄位註解有被維護

  • 想要快速讓 UI label 和資料庫一致

  • 不想再被「手動複製貼上」綁架

目前限制

  • 資料庫註解若沒維護,抓到的內容一樣沒用

  • Regex 抽取需要自己寫,沒 match 時會回退到註解第一行

  • 目前僅支援 SQL Server / PostgreSQL / SQLite

  • 一次更新很多檔案時,Git diff 可能會很大

未來規劃

  • 多語系支援(例如同時處理中文、英文 DisplayName)

  • 支援更多資料庫(MySQL、Oracle…)

  • 更細緻的設定(是否強制覆蓋、差異 log)

  • 與 CI/CD 整合(自動檢查 DisplayName 是否同步)

結語

serupd 是我為了解決自己開發痛點寫的小工具,現在分享出來,希望能幫到更多人。

它幫我省下了大量時間,讓 UI 顯示名稱自動與資料庫同步,不再需要手動比對、修改。

GitHub 連結:leoshiang/serenity-row-display-name-updater

如果你也在用 Serenity Framework,或許你會發現 serupd 能讓你的開發流程更乾淨、更高效。